<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Promise.prototype.then</title>
  </head>
  <body>
    <script>
      // 创建Promise对象
      const p = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve("用户数据");
          // reject("出错了！");
        }, 1000);
      });
      // 调用 then 方法,then方法的返回结果是 Promise对象,对象的状态由回调函数的执行结果决定
      // 1.如果回调函数返回值是 非Promise 类型的属性,状态为成功,返回值为对象的成功的值
      // 2.如果回调函数返回值是 promise 类型的属性，状态由返回的Promise的状态决定
      // 3.抛出错误 Promise 对象的状态为失败
      const result = p.then(
        (value) => {
          console.log(value);
          // 1.非 Promise 类型的属性
          return "123";
          // 2.是 promise 对象
          return new Promise((resolve, reject) => {
            resolve("ok");
            // reject("出错了");
          });
          // 3.抛出错误
          throw new Error("出错了");
          // throw '出错了';
        },
        (reason) => {
          console.warn(reason);
        }
      );

      // then 方法返回的是一个Promise对象,因此可以链式调用,在then方法中执行异步任务
      p.then(
        (value) => {},
        (reason) => {}
      ).then(
        (value) => {},
        (reason) => {}
      );
      console.log(result);
    </script>
  </body>
</html>
